/**
 * 
 */
package com.nari.sink.dao;

import java.util.List;

import com.nari.coreframe.dao.hibernate3.IGenericDao;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResultWithPageCond;
import com.nari.sink.bo.ISinkerStandardDict;

/**
 * 
 * @author Xiaopeng
 * @date 2014-4-15
 */
public interface ISinkerStandardDictDao extends IGenericDao<ISinkerStandardDict, String> {

	/**
	 * 分页查询散热器型号字典
	 * @param dictSerious
	 * @param sinkType
	 * @param brand
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-4-15
	 */
	public ResultWithPageCond<ISinkerStandardDict> querySinkerDictPage(String dictSerious, 
			String sinkType, String brand, PageCond pageCond) throws Exception;
	
	/**
	 * 根据标准散热器主要匹配参数（型号、中心距）统计符合匹配结果的型号数量
	 * @param sinkType
	 * @param sinkCenDis
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-4-18
	 */
	public int countSinkerDictPrimaryAdapter(String sinkType, double sinkCenDis) throws Exception;
	
	/**
	 * 根据标准散热器主要匹配参数（型号、中心距）查询符合匹配结果的型号列表
	 * @param sinkType
	 * @param sinkCenDis
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-4-18
	 */
	public List<ISinkerStandardDict> querySinkerDictPrimaryAdapterList(String sinkType, 
			double sinkCenDis) throws Exception;
	
	/**
	 * 根据标准散热器主要参数匹配结果（标准散热器UID列表）、次要匹配参数（品牌、尺寸[高、宽、长]、
	 * 单片功率）统计符合匹配结果的型号数量
	 * @param primaryAdapterUIDList 散热器主要参数匹配结果
	 * 说明：若主要参数匹配结果为空，则不执行次要参数匹配，并返回零结果集
	 * @param brand
	 * @param sinkHeight
	 * @param sinkWidth
	 * @param sinkLength
	 * @param calPower
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-4-18
	 */
	public int countSinkerDictSecondaryAdapter(List<String> primaryAdapterUIDList, String brand, 
			double sinkHeight, double sinkWidth, double sinkLength, double calPower) throws Exception;
	
	/**
	 * 根据标准散热器主要参数匹配结果（标准散热器UID列表）、次要匹配参数（品牌、尺寸[高、宽、长]、
	 * 单片功率）查询符合匹配结果的型号列表
	 * @param primaryAdapterUIDList 散热器主要参数匹配结果
	 * 说明：若主要参数匹配结果为空，则不执行次要参数匹配，并返回零结果集
	 * @param brand
	 * @param sinkHeight
	 * @param sinkWidth
	 * @param sinkLength
	 * @param calPower
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-4-18
	 */
	public List<ISinkerStandardDict> querySinkerDictSecondaryAdapterList(List<String> primaryAdapterUIDList, 
			String brand, double sinkHeight, double sinkWidth, double sinkLength, 
			double calPower) throws Exception;
	
	/**
	 * 根据散热器特征信息查询对应型号参数的标准散热器列表
	 * 散热器匹配原则：
	 * 优先级一：主要参数匹配，包括型号、中心距
	 * 优先级二：次要匹配参数，包括品牌、散热器尺寸（高、宽、长）、单片功率
	 * 说明：按照优先级从高到低的结果集最少的匹配原则，结果集越少，说明匹配精确度越高；
	 * 相应的数据冗余度可能越高，即同一型号参数的散热器因为参数等误差未正确匹配
	 * @param sinkerDict
	 * @return
	 * 返回结果说明：
	 * 1、结果集为空或结果集个数为0，说明字典库不存在此型号参数的标准散热器，视为正确匹配
	 * 2、结果集个数为1，说明字典库已存在此型号参数的标准散热器，也视为正确匹配
	 * 3、结果集个数大于1，说明字典库存在多个同种类型参数的标准散热器，视为匹配异常
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-4-18
	 */
	public List<ISinkerStandardDict> queryByCharacteristicInfo(ISinkerStandardDict sinkerDict) throws Exception;
}
